package com.settlement.system.mapper;

import com.settlement.system.model.entity.common.TblUnificationBillDetail;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 统一账单明细 Mapper 接口
 *
 * @author Ximi
 * @since 2020-07-01
 */
public interface TblUnificationBillDetailMapper extends OtherCapitalStatisticsMapper {

    /**
     * 获取合计
     *
     * @param params 请求参数
     * @return
     */
    public TblUnificationBillDetail getFoot(@Param("params") Map<String, Object> params);

    /**
     * 获取爱库存已经推送的数量
     *
     * @param actionId  活动ID
     * @param billTypes 账单类型
     * @return
     */
    public Integer getAkcPushedCount(@Param("actionId") String actionId, @Param("billTypes") List<String> billTypes);

    /**
     * 更新爱库存的日期
     *
     * @param actionId  活动ID
     * @param billTypes 账单类型
     * @param outDate   销售日期
     * @return
     */
    public Integer updateAkcDate(@Param("actionId") String actionId, @Param("billTypes") List<String> billTypes,
                                 @Param("outDate") Date outDate);

    /**
     * 获取 status 状态 的数量
     *
     * @param status
     * @param params 限制条件
     * @return
     */
    public Integer getStatusCount(@Param("status") String status, @Param("params") Map<String, Object> params);

    Integer getNotStatusCount(@Param("notStatus") String notStatus, @Param("params") Map<String, Object> params);

    /**
     * 查询关账信息
     * @param params
     * @return
     */
    TblUnificationBillDetail selectCloseAccountInfo(@Param("params") Map<String, Object> params);

    /**
     * 更新状态
     *
     * @param updateStatus 更新的状态
     * @param updateUser 更新者
     * @param params 限制条件
     * @return
     */
    public Integer updateStatus(@Param("updateStatus") String updateStatus,
                                @Param("updateUser") String updateUser,
                                @Param("params") Map<String, Object> params);

    /**
     * 更新匹配
     * @param detail
     * @return
     */
    public Integer updateMatch(TblUnificationBillDetail detail);

    /**
     * 刷新未匹配的单据
     * @param params
     * @return
     */
    public Integer refreshNoMatch(Map<String,Object> params);

    /**
     * 刷新未匹配的单据 - 单个
     * @param detail
     * @return
     */
    public Integer refreshNoMatchOne(TblUnificationBillDetail detail);

    /**
     * refreshNoMatchByActionIdOfAkc
     * @param actionid
     * @return
     */
    public Integer refreshNoMatchByActionIdOfAkc(@Param("actionId") String actionid);

    /**
     * 刷选爱库存日期
     * @param params
     * @return
     */
    public Integer refreshAkcDate(Map<String,Object> params);

    /**
     * 批量新增
     *
     * @param list
     */
    public void batchAdd(List<TblUnificationBillDetail> list);

    /**
     * 删除爱库存相关数据
     * @param params
     */
    public void deleteAkcDataByParams(@Param("params") Map<String,Object> params);

    /**
     * 删除数据通过统一账单ID区间范围
     *
     * @param minUnificationBillId
     * @param maxUnificationBillId
     */
    public void deleteByUnificationBillIds(@Param("minUnificationBillId") String minUnificationBillId, @Param("maxUnificationBillId") String maxUnificationBillId);

    /**
     *查看关账后的数据
     * @param params
     * @return
     */
    int validateCloseDate(@Param("params") Map<String,Object> params);

    /**
     *查询需要删除数据汇总
     * @param params
     * @return
     */
    List<TblUnificationBillDetail> getDeleteDate(@Param("params") Map<String, Object> params);

    int selectCountByBatchNumberAndCpnStatus(@Param("params") Map<String, Object> params);

    int selectCountByBatchNumberAndNotCmStatus(@Param("params") Map<String, Object> params);

    int selectCountByBatchNumberAndNotCreateUser(@Param("params") Map<String, Object> params);

    /**
     * 删除批次数据
     * @param params
     * @return
     */
    int deleteByBatchNumber(@Param("params") Map<String, Object> params);

    /**
     * updateStatusBySummaryIdList
     * @param summaryIdList
     * @param originStatus
     * @param status
     * @return
     */
    public Integer updateStatusBySummaryIdList(@Param("list") List<String> summaryIdList,
                                               @Param("originStatus") String originStatus,
                                               @Param("status") String status);

    public Integer clearSummaryIdBysummaryIdList(@Param("list") List<String> summaryIdList);

    Long selectTheNewestBatchNumber();

    Integer selectOneByBatchNumber(@Param("batchNumber") long batchNumber);

    Integer updateOriginBillProjectBySerialNoList(@Param("list") List<String> serialNoList);

    void refreshShareOrNot(@Param("params") Map<String,Object> params);

    void refreshBeforeOrAfterTicket(@Param("params") Map<String,Object> params);

    TblUnificationBillDetail selectOneByParam(@Param("params") Map<String, Object> params);
}

